home *** CD-ROM | disk | FTP | other *** search
Modula Implementation | 1993-11-04 | 3.9 KB | 114 lines |
-
- IMPLEMENTATION MODULE QuadLese;
-
- FROM InOut IMPORT Read, WriteLn, Write, WriteString;
-
-
- PROCEDURE LeseZeichen() : CHAR;
- VAR ch : CHAR;
- korrekt : BOOLEAN; (* Eingabe eines korrekten Zeichens. *)
- BEGIN
- korrekt:=FALSE;
- WHILE NOT(korrekt) DO
- Read(ch);
- CASE ch OF
- "b" : korrekt:=TRUE;
- | "B" : korrekt:=TRUE;ch:="b"; (* begin *)
- | "e" : korrekt:=TRUE;
- | "E" : korrekt:=TRUE;ch:="e"; (* end *)
- | "w" : korrekt:=TRUE;
- | "W" : korrekt:=TRUE;ch:="w"; (* while *)
- | "d" : korrekt:=TRUE;
- | "D" : korrekt:=TRUE;ch:="d"; (* do *)
- | ":" : korrekt:=TRUE; (* := *) (* Zuweisung *)
- | "#" : korrekt:=TRUE; (* # *)
- | "s" : korrekt:=TRUE;
- | "S" : korrekt:=TRUE;ch:="s"; (* succ *)
- | "p" : korrekt:=TRUE;
- | "P" : korrekt:=TRUE;ch:="p"; (* pred *)
- | ";" : korrekt:=TRUE; (* ; *)
- | "(" : korrekt:=TRUE; (* ( *)
- | ")" : korrekt:=TRUE; (* ) *)
- | "x" : korrekt:=TRUE;ch:="X";
- | "X" : korrekt:=TRUE; (* X *) (* Variable *)
- | "u" : korrekt:=TRUE;ch:="U"; (* Unterprogramm *)
- | "U" : korrekt:=TRUE;
- ELSE
- IF (ch >= "0") AND (ch <= "9") THEN (* Zahlen *)
- korrekt:=TRUE;
- ELSE
- (* Fehlerhafte Eingabe eines Zeichens. *)
- END;
- END; (* OF CASE *)
- END;
- Write(ch);
- RETURN ch;
- END LeseZeichen;
-
-
- PROCEDURE Lese(VAR Liste : arrList);
- VAR i, (* Schleifenzaehler *)
- begin : CARDINAL; (* Zaehler fuer noch offene 'begin' Anweisungen *)
- ch : CHAR;
- BEGIN
- WriteString("Eingabe des while-Programms.");WriteLn;
- WriteString("Geben Sie bitte folgende Zeichen fuer die jeweiligen");
- WriteString(" Befehle ein.");WriteLn;WriteLn;
- WriteString(" 'b' <-> begin 'e' <-> end");WriteLn;
- WriteString(" 'w' <-> while 'd' <-> do");WriteLn;
- WriteString(" ':' <-> := '#' <-> #");WriteLn;
- WriteString(" 's' <-> succ 'p' <-> pred");WriteLn;
- WriteLn;
- WriteString("Ausserdem sind noch folgende Zeichen erlaubt :");WriteLn;
- WriteString(" ';' '(' ')' '0' '1' '2' '3'");WriteLn;
- WriteString(" '4' '5' '6' '7' '8' '9' 'X'");WriteLn;
- WriteLn;
- WriteString("Ausserdem steht 'U#' fuer einige Unterprogramme.");WriteLn;
- WriteString("Das Ergebnis steht in X1. X0 - X9 sind Eingabevariablen.");
- WriteLn;
- WriteString(" U1 <--> Addition X1 := X1 + X2.");WriteLn;
- WriteString(" U2 <--> Subtraktion X1 := X1 - X2.");WriteLn;
- WriteString(" U3 <--> Multiplikation X1 := X1 * X2.");WriteLn;
- WriteString(" U4 <--> Division X1 := X1 DIV X2.");WriteLn;
- WriteString(" U5 <--> Modular X1 := X1 MOD X2.");WriteLn;
- WriteLn;
- WriteString("Beispiele fuer korrekte while-Programme :");WriteLn;
- WriteString(" bwX1#x2dwX1#X4dX1:s(X1);X2:X4e");WriteLn;
- WriteString(" ergibt : begin");WriteLn;
- WriteString(" while X1 # X2 do");WriteLn;
- WriteString(" while X1 # X4 do");WriteLn;
- WriteString(" X1:=succ(X1);");WriteLn;
- WriteString(" X2:=X4");WriteLn;
- WriteString(" end");WriteLn;
- WriteLn;
- WriteLn;
- WriteString("Geben Sie jetzt Ihr Programm gemaess obiger Definition ein : ");
- WriteLn;
-
- ch:=LeseZeichen();
- IF ch # 'b' THEN
- WriteString("Dies kann kein korrektes while-Programm sein!!!");WriteLn;
- WriteLn;
- HALT;
- ELSE
- Liste[1]:='b';
- i:=2;
- begin:=1;
- WHILE begin # 0 DO
- ch:=LeseZeichen();
- IF ch = 'b' THEN INC(begin) END;
- IF ch = 'e' THEN DEC(begin) END;
- Liste[i]:=ch;
- INC(i);
- IF i > MaxBefehle THEN
- WriteString("Out of Memory!!! Erhoehe MaxBefehle.");WriteLn;
- WriteLn;
- HALT;
- END;
- END;
- END;
- END Lese;
-
- END QuadLese.
-
-